Hệ thống quản lý phòng khám trực tuyến bằng PHP
1 <?php
2 $currDir = dirname(__FILE__);
3 require("{$currDir}/incCommon.php");
4 $GLOBALS['page_title'] = $Translation['done!'];
5 include("{$currDir}/incHeader.php");
6 $mailsPerBatch = 5;
7
8 ?>
9 <style>
10 #sendmail-debug{ height: 20em; overflow: auto; }
11 </style>
12 <?php
13
14 $queue = $_REQUEST['queue'];
15 $simulate = (isset($_REQUEST['simulate']) ? true : false);
16 if(!preg_match('/^[a-f0-9]{32}$/i', $queue)){
17 echo "<div class=\"alert alert-danger\">{$Translation['invalid mail queue']}</div>";
18 include("{$currDir}/incFooter.php");
19 }
20
21 $queueFile = "{$currDir}/{$queue}.php";
22 if(!is_file($queueFile)){
23 echo "<div class=\"alert alert-danger\">{$Translation['invalid mail queue']}</div>";
24 include("{$currDir}/incFooter.php");
25 }
26
27 include($queueFile);
28
29 // escape new lines in message and remove them in subject
30 $escaped_mailMessage = strip_tags($mailMessage);
31 $escaped_mailSubject = str_replace(
32 array("\n", "\r"),
33 '',
34 strip_tags($mailSubject)
35 );
36
37 if($simulate){
38 echo '<pre>' . htmlspecialchars($escaped_mailSubject) . '</pre>';
39 echo '<pre>' . htmlspecialchars($escaped_mailMessage) . '</pre>';
40 }
41
42 $fLog = @fopen("{$currDir}/{$queue}.log", "a");
43 // send a batch of up to $mailsPerBatch messages
44 $i = 0;
45 echo '<pre id="sendmail-debug" style="display: none;">';
46 foreach($to as $email){
47 if(!isEmail($email)) continue;
48 $i++;
49
50 $mail_status = (rand(1, 10) % 3 ? true : false);
51 if(!$simulate){
52 $mail_status = sendmail(array(
53 'to' => $email,
54 'subject' => $escaped_mailSubject,
55 'message' => nl2br($escaped_mailMessage),
56 'debug' => ($_SESSION["debug_{$queue}"] ? 2 : 0)
57 ));
58 }
59
60 $mail_log = str_replace("<EMAIL>", $email, $Translation['sending message ok']);
61 if($mail_status !== true){
62 $mail_log = str_replace("<EMAIL>",$email, $Translation['sending message failed'] . " -- {$mail_status}");
63 }
64 @fwrite($fLog, @date("d.m.Y H:i:s") . $mail_log . "\n");
65
66 if($i >= $mailsPerBatch) break;
67 }
68 echo '</pre>';
69 @fclose($fLog);
70
71 if($i < $mailsPerBatch){
72 // no more emails in queue, so delete queue and unset showDebug
73 @unlink($queueFile);
74
75 $mail_log = @file_get_contents("{$currDir}/{$queue}.log");
76 ?>
77 <div class="page-header">
78 <h1><?php echo $Translation['done!'] ; ?></h1>
79 </div>
80 <?php echo $Translation['close page'] ; ?>
81 <br><br>
82 <pre style="text-align: left;"><?php echo "<b>{$Translation['mail log']}</b>\n{$mail_log}"; ?></pre>
83
84 <?php if($_SESSION["debug_{$queue}"]){ ?>
85 <div id="sendmail-debug-show"></div>
86 <script>
87 $j(function(){
88 $j('#sendmail-debug').appendTo('#sendmail-debug-show');
89 $j('#sendmail-debug').css({ display : 'block'});
90 })
91 </script>
92 <?php } ?>
93
94 <?php
95 @unlink("{$currDir}/{$queue}.log");
96 unset($_SESSION["debug_{$queue}"]);
97 include("{$currDir}/incFooter.php");
98 }
99
100 while($i--){ array_shift($to); }
101
102 if(!$fp = fopen($queueFile, "w")){
103 ?>
104 <div class="alert alert-danger">
105 <?php echo str_replace("<CURRDIR>", $currDir, $Translation["mail queue not saved"]); ?>
106 </div>
107 <?php
108 include("{$currDir}/incFooter.php");
109 }
110
111 fwrite($fp, '<' . "?php\n");
112 foreach($to as $recip){
113 fwrite($fp, "\t\$to[] = '{$recip}';\n");
114 }
115 fwrite($fp, "\t\$mailSubject = \"" . addcslashes($mailSubject, "\r\n\t\"\\\$") . "\";\n");
116 fwrite($fp, "\t\$mailMessage = \"" . addcslashes($mailMessage, "\r\n\t\"\\\$") . "\";\n");
117 fwrite($fp, '?' . '>');
118 fclose($fp);
119
120 // redirect to mail queue processor
121 if(!$simulate){
122 redirect("admin/pageSender.php?queue={$queue}");
123 }else{
124 echo "<a href=\"pageSender.php?queue={$queue}&simulate=1\">{$Translation['next']}</a>";
125 }
126
127 include("{$currDir}/incFooter.php");
128 ?>